<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Auth
{
    private $ci;
    public function __construct(){
    	$this->ci = &get_instance();

    }

    function check_logged($classe,$metodo)
    {
        /*
    	* Criando uma instância do CodeIgniter para poder acessar
    	* banco de dados, sessionns, models, etc...
    	*/
    	$this->CI =& get_instance();
        $this->ci->load->library('session');

    	/**
    	* Buscando a classe e metodo da tabela sys_metodos
    	*/
    	$array = array('classe' => $classe, 'metodo' => $metodo);
		$this->CI->db->where($array);
		$query  = $this->CI->db->get('metodos');
		$result = $query->result();

		// Se este metodo ainda não existir na tabela sera cadastrado
		if(count($result)==0){
			$data = array(
                                    'classe'      => $classe ,
                                    'metodo'      => $metodo ,
                                    'apelido'     => $classe .  '/' . $metodo,
                                    'privado'     => 1,
                                    'create_time' => now()
                                    );

			$this->CI->db->insert('metodos', $data);
			redirect(base_url(). 'index.php/' . $classe . '/' . $metodo, 'refresh');
		}
		//Se ja existir tras as informacoes de publico ou privado
		else{

			if($result[0]->privado==0){
				// Escapa da validacao e mostra o metodo.
				return false;
			}
			else{
				// Se for privado, verifica o login
				$nome       = $this->ci->session->userdata('username');
                                $logged_in  = $this->ci->session->userdata('logged_in');
                                $data       = $this->ci->session->userdata('data');
                                $email      = $this->ci->session->userdata('email');
				$idUsuario  = $this->ci->session->userdata('idUsuario');

				$idMetodos = $result[0]->idMetodos;

				// Se o usuario estiver logado vai verificar se tem permissao na tabela.
				if($nome && $logged_in && $idUsuario)
                                {
					$array = array('Metodos_idMetodos' => $idMetodos, 'Usuario_idUsuario' => $idUsuario);
					$this->CI->db->where($array);
					$query2 = $this->CI->db->get('usuario_has_metodos');
					$result2 = $query2->result();

					// Se não vier nenhum resultado da consulta, manda para página de
					// usuario sem permissão.
					if(count($result2)==0){
						redirect(base_url().'index.php/home/sempermissao', 'refresh');
					}
					else{
						return true;
					}
                                }// Se não estiver logado, sera redirecionado para o login.
                                else
                                {
                                    redirect(base_url() . 'index.php/home/login', 'refresh');
                                }
			}
		}
    }

    /**
    * Método auxiliar para autenticar entradas em menu.
    * Não faz parte do plugin como um todo.
    */
    function check_menu($classe,$metodo){
    	$this->CI =& get_instance();
		$sql = "SELECT SQL_CACHE
				count(usuario_has_metodos.idUsuario_has_Metodos) as found
				FROM
				usuario_has_metodos
				INNER JOIN metodos
				ON metodos.idUsuario_has_Metodos = usuario_has_metodos.Metodos_idMetodos
				WHERE Usuario_idUsuario = '" . $this->ci->session->userdata('idUsuario') . "'
				AND classe = '" . $classe . "'
				AND metodo = '" . $metodo . "'";
		$query = $this->CI->db->query($sql);
		$result = $query->result();
		return $result[0]->found;
    }
}